'''
集合（set）是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合，
注意：创建一个空集合必须用 set() 而不是 { }，因为 { } 是用来创建一个空字典。


集合数据的特点，
1. 无序
2. 不重复
3. 集合中的元素必须是不可变类型
4. 集合中的元素是唯一的
5. 集合中的元素是无序的





'''

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # 输出: {'orange', 'banana', 'pear', 'apple'} 集合有去重复的功能, 并且是无序的

# 创建集合
# 1. 直接创建
set1 = {1, 2, 3, 4, 5}
print(set1)
# 2. 使用set()函数创建
set2 = set([1, 2, 3, 4, 5])
print(set2)
# 2. 列表推导式
set2= {x for x in 'hello world'}
print(set2)


# 集合的操作，
# 1. 增加元素

set1 = {1, 2, 3, 4, 5}
set1.add(6) # 增加一个元素
print(set1)
set1.add(3)
print(set1)
set1.update({7, 8, 9})
print(set1)
set1.update([10, 11, 12]) # 增加多个元素，列表
print(set1)
set1.update('abc') # 增加多个元素，字符串
print(set1)

set1.update((67,89,100)) # 增加多个元素，元祖
print(set1)

# set1.update(45,67,89) # TypeError: 'int' object is not iterable  不能增加多个元素，整数，需要能够迭代
# print(set1)

# 2. 删除元素
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
basket.remove('banana')
print(basket)
# basket.remove('banana') # KeyError: 'banana'，上面已经删除了，再次删除会报错
# print(basket)

basket.discard('banana') # 不会报错，如果元素不存在，不会报错
print(basket)
basket.pop() # 随机删除一个元素
print(basket)
basket.clear() # 清空集合
print(basket)
del basket # 删除集合
# print(basket)

# 3.集合查找
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print('apple' in basket)
print('orange' not in basket)
print({'orange','apple'} in basket)
print({'apple','orange','banana'} in basket)



# 4，集合的长度

print(len(set1)) # 集合的长度

# 5，集合的交集
set1 = {1, 2, 3, 4, 5}
set2 = {3, 4, 5, 6, 7}
print(set1.intersection(set2))
print(set1 & set2)
# 6，集合的并集
print(set1.union(set2))
print(set1 | set2)
# 7，集合的差集，属于set1，不属于set2
print(set1.difference(set2)) # 属于set1，不属于set2
print(set1 - set2) # 属于set1，不属于set2
print(set2.difference(set1)) # 属于set2，不属于set1
print(set2 - set1) # 属于set2，不属于set1

# 8，集合的对称差集，属于set1，不属于set2，或者属于set2，不属于set1，不能同时属于set1和set2。
print(set1.symmetric_difference(set2))
print(set1 ^ set2)
# 9，集合的子集
set1 = {1, 2}
set2 = {1,2,3, 4, 5, 6, 7}
print(set1.issubset(set2))
print(set1 <= set2)
print(set2 >= set1)
print(set2.issuperset(set1))










